// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
// const dbJQL = uniCloud.databaseForJQL({
// 	clientInfo: uniCloud.databaseForJQL().getClientInfo()
// })

const cloudToUrlArr = (e) => {
	return new Promise((resolve, reject) => {
		uniCloud.getTempFileURL({
			fileList: e
		}).then(res => {
			resolve(res.fileList)
		}).catch(err => {
			reject(err)
		})
	})
}
const dbJQL = uniCloud.databaseForJQL({
	clientInfo: uniCloud.databaseForJQL().getClientInfo()
})
module.exports = {
	_before: function() { // 通用预处理器
		// this.dbJQL = uniCloud.databaseForJQL({
		// 	clientInfo:this.getClientInfo()
		// })
	},
	/**
	 * getHomeData 获取首页数据
	 * @returns {array} 
	 */
	getHomeData() {
		return this.dbJQL.collection("client-home-data").orderBy("sort").get()
	},
	/**
	 * getBannerList 获取横屏轮播壁纸列表
	 * @param {number} count 返回条数,默认返回5条
	 * @returns {array} 返回横屏轮播壁纸数组
	 */
	getBannerList(count = 3) {
		return this.dbJQL.collection("wallpaper")
			.where("direction == 0")
			.skip(4)
			.limit(count)
			.get()
	},

	/**
	 * getSortList 获取某分类下的n条数据
	 * @param {string} categoryId 分类id
	 * @param {number} count 返回条数,默认返回5条
	 * @param {number} page 页码,默认返回第一页
	 * @returns {arr} 壁纸数组
	 */
	getSortList(categoryId, fx, count = 5, page = 1) {
		return this.dbJQL.collection("wallpaper")
			.where(`categoryIds == '${categoryId}' && direction == ${fx}`)
			.limit(count).skip((page - 1) * count)
			.get()
	},

	async _after(error, result) {
		if (error) {
			throw error // 如果方法抛出错误，也直接抛出不处理
		}
		const {
			data
		} = result


		if (data[0]?.url) {
			// 提取对象中的图片url
			let urlArr = []
			data.forEach(item => {
				urlArr.push(item.url)
			})
			const res = await cloudToUrlArr(urlArr)
			data.forEach((item, index) => {
				item.cloudUrl = item.url
				item.url = res[index].tempFileURL
			})
		}


		// const newRes = await cloudToUrlArr(result.data)
		return data
	}


	/**
	 * method1方法描述
	 * @param {string} param1 参数1描述
	 * @returns {object} 返回值描述
	 */
	/* 
	method1(param1) {
		// 参数校验，如无参数则不需要
		if (!param1) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '参数不能为空'
			}
		}
		// 业务逻辑
		
		// 返回结果
		return {
			param1 //请根据实际需要返回值
		}
	}
	*/
}